home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / ctask22d / tskstub.asm < prev    next >
Assembly Source File  |  1990-11-22  |  7KB  |  360 lines

  1. ;
  2. ;    --- Version 2.2 90-11-22 12:12 ---
  3. ;
  4. ;    CTask - Code sharing function stubs
  5. ;
  6. ;    Public Domain Software written by
  7. ;        Thomas Wagner
  8. ;        Ferrari electronic Gmbh
  9. ;        Beusselstrasse 27
  10. ;        D-1000 Berlin 21
  11. ;        Germany
  12. ;
  13. ;    This file is new with version 2.1.
  14. ;    It is used to generate the function entry stubs to allow
  15. ;    applications to share the code of the first, resident,
  16. ;    CTask invocation.
  17. ;
  18. ;    Two object files are generated from this source:
  19. ;
  20. ;    If GEN_JTAB is defined on assembly, an entry address table is 
  21. ;    generated that is to be linked with the primary invocation.
  22. ;
  23. ;    If no Define is given on assembly, the function stubs for the 
  24. ;    application are generated.
  25. ;
  26. ;    There are two macros, 'stub' and 'dstub'. The 'stub' macro
  27. ;    creates an actual entry/external, whereas the 'dstub' macro
  28. ;    only creates a dummy table entry, and no public label.
  29. ;
  30. ;    You should define all entries you are using anyway in your
  31. ;    primary invocation with 'stub'.
  32. ;    Functions that are not used in either primary or secondary
  33. ;    may be defined with 'dstub'.
  34. ;    YOU SHOULD NOT delete entries or change the order of entries.
  35. ;
  36. ;    It is possible to have a mix of code sharing and locally loaded
  37. ;    routines in an application. The routines in tskmain.c and tsksub.c
  38. ;    should, however, always be enabled with 'stub', since they are always
  39. ;    included in the primary, and could cause problems when directly
  40. ;    linked.
  41. ;
  42. ;    CAUTION: The application may use small model, i.e. near entries
  43. ;         into the stub table. The NEAR_CODE define may be
  44. ;         set to 1 when compiling this module for the application.
  45. ;
  46. ;         The primary kernel MUST use far routines for code
  47. ;         sharing to work, and the entry points must load DS on
  48. ;         entry.
  49. ;
  50.     include    tsk.mac
  51. ;
  52.     .tsk_model
  53. ;
  54. ;
  55.     IFDEF    GEN_JTAB
  56.     public    tsk_jmptab
  57.     ENDIF
  58. ;
  59. nstubs    =    0
  60. ;
  61. stub    macro    extn,ccc
  62.     IFNB    <ccc>
  63.     IFDEF    GEN_JTAB
  64.     CGlbext    extn
  65.     ELSE
  66.     CPubfnc    extn
  67.     ENDIF
  68.     ELSE
  69.     IFDEF    GEN_JTAB
  70.     Globext    extn
  71.     ELSE
  72.     Pubfunc    extn
  73.     ENDIF
  74.     ENDIF
  75.     IF1
  76. estr    catstr    <stb>,%nstubs
  77. % estr    equ    <extn>
  78.     ENDIF
  79. nstubs    =    nstubs+1
  80.     endm
  81. ;
  82. dstub    macro    extn
  83. nstubs    =    nstubs+1
  84.     endm
  85. ;
  86. ;------------------------------------------------------------------
  87. ;
  88. ;    The routines from the module
  89. ;        tskres
  90. ;    must be linked directly, since they establish the
  91. ;    stub linkage.
  92. ;
  93. ;    The routines from the modules
  94. ;        tskmain
  95. ;        tskgrp
  96. ;    must not be defined as function stubs. Those routines
  97. ;    need local routine/variable info, and thus must be linked
  98. ;    with the secondary invocation. For secondary invocations
  99. ;    not creating groups, the routines defined there are not needed
  100. ;    anyway.
  101. ;
  102. ;    The local routines defined in
  103. ;        tsksub
  104. ;        tskque
  105. ;    are normally defined as 'near'. Including those routines
  106. ;    into the stub list would require them to be defined as
  107. ;    far _loadds (Huge for TC). This would slow down the most basic
  108. ;    operations, and is not recommended.
  109. ;
  110. ;------------------------------------------------------------------
  111. ;
  112. ;    The following entries should always be 'stub', not 'dstub',
  113. ;    since they are in the primary anyway.
  114. ;
  115. ;    module tskinst
  116. ;
  117.     stub    tsk_install_main
  118.     stub    tsk_remove_chain
  119.     stub    tsk_remove_tasker
  120. ;
  121. ;    module tskutil
  122. ;
  123.     stub    preempt_on
  124.     stub    preempt_off
  125.     stub    tsk_ena_preempt
  126.     stub    tsk_dis_preempt
  127.     stub    t_delay
  128. ;
  129. ;    module tsktask
  130. ;
  131.     stub    create_task
  132.     stub    kill_task
  133.     stub    start_task
  134.     stub    wake_task
  135. ;
  136. ;    module tskasm
  137. ;
  138.     stub    schedule
  139.     stub    tsk_scheduler
  140.     stub    yield
  141.     stub    tsk_dis_int
  142.     stub    tsk_ena_int
  143.     stub    tsk_nop
  144.     stub    tsk_inpw
  145.     stub    tsk_flags
  146.     stub    tsk_dseg
  147.     stub    tsk_callfunc
  148.     stub    tsk_memcpy
  149. ;
  150. ;-------------------------------------------------------------------
  151. ;
  152. ;    The following functions may be either 'stub' or 'dstub',
  153. ;    but are normally used by kernel routines anyway, so you can
  154. ;    keep them as 'stub'.
  155. ;
  156. ;    module tskrsc
  157. ;    Resources are used in the DOS module
  158. ;
  159.     stub    create_resource
  160.     stub    delete_resource
  161.     stub    release_resource
  162.     stub    request_resource
  163.     stub    request_cresource
  164.     stub    c_request_resource
  165.     stub    c_request_cresource
  166.     stub    check_resource
  167. ;
  168. ;    module tskflg
  169. ;    Flags are in the DOS module, too
  170. ;
  171.     stub    create_flag
  172.     stub    delete_flag
  173.     stub    set_flag
  174.     stub    clear_flag
  175.     stub    clear_flag_wait_set
  176.     stub    wait_flag_set
  177.     stub    wait_flag_clear
  178.     stub    check_flag
  179. ;
  180. ;    module tskcnt
  181. ;    Counters are used for the timer tasks
  182. ;
  183.     stub    create_counter
  184.     stub    delete_counter
  185.     stub    clear_counter
  186.     stub    wait_counter_set
  187.     stub    wait_counter_clear
  188.     stub    inc_counter
  189.     stub    dec_counter
  190.     stub    set_counter
  191.     stub    check_counter
  192. ;
  193. ;-------------------------------------------------------------------
  194. ;
  195. ;    The following functions may be either 'stub' or 'dstub'.
  196. ;    They are not referenced by kernel routines, but if you have
  197. ;    them in the primary, you can keep them as 'stub'.
  198. ;
  199. ;    module tskname
  200. ;
  201.     dstub    find_group_name
  202.     dstub    find_name
  203. ;
  204. ;    module tsksec
  205. ;
  206.     dstub    tsk_free_mem
  207.     dstub    tsk_getpsp
  208.     dstub    t_read_key
  209.     dstub    t_wait_key
  210.     dstub    t_keyhit
  211. ;
  212. ;    module tsktutl
  213. ;
  214.     dstub    get_priority
  215.     dstub    set_priority
  216.     dstub    set_funcs
  217.     dstub    set_user_ptr
  218.     dstub    get_user_ptr
  219.     dstub    curr_task
  220.     dstub    stop_task
  221. ;
  222. ;    module tsktops
  223. ;
  224.     dstub    create_timer,c
  225.     dstub    delete_timer
  226.     dstub    change_timer,c
  227. ;
  228. ;    module tsktsub
  229. ;
  230.     dstub    delete_watch
  231. ;
  232. ;    module tskmemw
  233. ;
  234.     dstub    create_memory_watch,c
  235.     dstub    wait_memory
  236. ;
  237. ;    module tskporw
  238. ;
  239.     dstub    create_port_watch,c
  240.     dstub    wait_port
  241. ;
  242. ;    module tskhot
  243. ;
  244.     dstub    create_hotkey_entry,c
  245.     dstub    wait_hotkey
  246. ;
  247. ;    module    tskmail
  248. ;
  249.     stub    create_mailbox
  250.     stub    delete_mailbox
  251.     stub    send_mail
  252.     stub    wait_mail
  253.     stub    c_wait_mail
  254.     stub    check_mailbox
  255. ;
  256. ;    module    tskpip
  257. ;
  258.     dstub    create_pipe
  259.     dstub    delete_pipe
  260.     dstub    read_pipe
  261.     dstub    c_read_pipe
  262.     dstub    write_pipe
  263.     dstub    c_write_pipe
  264.     dstub    wait_pipe_empty
  265.     dstub    check_pipe
  266.     dstub    pipe_free
  267.     dstub    flush_pipe
  268. ;
  269. ;    module    tskwpip
  270. ;
  271.     dstub    create_wpipe
  272.     dstub    delete_wpipe
  273.     dstub    read_wpipe
  274.     dstub    c_read_wpipe
  275.     dstub    write_wpipe
  276.     dstub    c_write_wpipe
  277.     dstub    wait_wpipe_empty
  278.     dstub    check_wpipe
  279.     dstub    wpipe_free
  280.     dstub    flush_wpipe
  281. ;
  282. ;    module    tskbuf
  283. ;
  284.     dstub    create_buffer
  285.     dstub    delete_buffer
  286.     dstub    read_buffer
  287.     dstub    c_read_buffer
  288.     dstub    write_buffer
  289.     dstub    c_write_buffer
  290.     dstub    check_buffer
  291. ;
  292. ;    module    tsktick
  293. ;
  294.     dstub    create_ticker
  295.     dstub    delete_ticker
  296.     dstub    set_ticker
  297.     dstub    get_ticker
  298. ;
  299. ;-------------------------------------------------------------------
  300. ;
  301.     IFNDEF    GEN_JTAB
  302.     .tsk_data
  303.     extrn    tsk_global: dword
  304. ;
  305.     .tsk_edata
  306.     ENDIF
  307.     .tsk_code
  308. ;
  309. nstb    =    0
  310. ;
  311.     IFDEF    GEN_JTAB
  312. ;
  313. ;    The 'fault' entry just does an INT 3, which breaks to a debugger
  314. ;    if one is installed. If no debugger is running, you're out of luck.
  315. ;    But... you should never get here unless you have different 
  316. ;    stub/dstub combinations in primary and secondary.
  317. ;
  318. @fault    proc    far
  319.     int    3
  320.     ret
  321. @fault    endp
  322. ;
  323. ;
  324. tsk_jmptab    label    dword
  325.     ENDIF
  326. ;
  327.     rept    nstubs
  328. estr    catstr    <stb>,%nstb
  329.     IFDEF    GEN_JTAB
  330. %    IFDEF    estr
  331.     dd    estr
  332.     ELSE
  333.     dd    @fault
  334.     ENDIF
  335.     ELSE
  336.     IFDEF    estr
  337. % estr:
  338.     IF    NEAR_CODE
  339.     pop    bx
  340.     push    cs
  341.     push    bx
  342.     ENDIF
  343.     IFDEF    LOAD_DS
  344.     mov    bx,@CTASK_DATA
  345.     mov    es,bx
  346.     les    bx,es:tsk_global
  347.     ELSE
  348.     les    bx,tsk_global
  349.     ENDIF
  350.     les    bx,es:stub_table[bx]
  351.     jmp    dword ptr es:[bx+(nstb*4)]
  352.     ENDIF
  353.     ENDIF
  354. nstb    =    nstb+1
  355.     endm
  356. ;
  357.     .tsk_ecode
  358.     end
  359.  
  360.